/******************************************************************************
 * FileName:    gwin_btn_task.c
 * Desc:        按键任务
 *
 *
 * Author:      Lin
 * Notes:
 *
 ******************************************************************************/

#ifndef _GWIN_BTN_TASK_H_
#define _GWIN_BTN_TASK_H_


/*-------------------------- Includes ---------------------------------------*/
#include "gwin_global_data.h"


/*-------------------------- Macro Definitions ------------------------------*/
#define BTN_CNT_MAX                 ( GWIN_DEV_BTN_CNT_MAX )

//#define BTN_CLICK_REPEAT            0               // 按键连按判断
#define DEBOUNCE_TIME_10MS          3               // 按键时间 消抖
#define BTN_TIME_SHORT_RELEASE      400             // 按键时间 短按放手后统计短按次数的时间
#define BTN_TIME_LONG               500             // 按键时间 长按
#define BTN_TIME_LONG_HOLD          5000            // 按键时间 长按保持


/*-------------------------- Type Declarations ------------------------------*/
/**
 * @brief 按键
 */
typedef struct btn_ctrl_t
{
    uint32_t time_clock;            // 时钟
    uint8_t ctrl_state     : 3;     // 控制状态
    uint8_t cur_state      : 1;     // 电平状态
    uint8_t trigger_long   : 1;     // 触发长按
    uint8_t click_repeat_en: 1;     // 按键连按判断
    uint8_t short_cnt;              // 短按次数
    uint8_t debounce_cnt;           // 消抖
    uint8_t reserve;                // 保留
}btn_ctrl_t;


/*-------------------------- Global Variables -------------------------------*/

/*-------------------------- Local Variables --------------------------------*/

/*-------------------------- Functions Declarations -------------------------*/

/*-------------------------- Functions Definitions --------------------------*/
void gwin_btn_task(void *param);
void gwin_btn_task_init(void);

void gwin_btn_cfg_set_click_repeat_en(uint8_t index, uint8_t value);


#endif  // _GWIN_BTN_TASK_H_


/*-------------------------- END OF FILE ------------------------------------*/

